{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "2a98937f-4b9d-411d-907e-d42916a139d7",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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sWTJkvjlL38ZTz/9dFxzzTV99SvwLgfKaUTEjBkzuu2799xzT7f5coqaKZ3UTdmhbkoXdVP5UzeVNzVTOpVM3ZSUgDvvvDOpr6/vcV5EJD//+c/3+dwbbrghOemkk7pNu+yyy5Lp06fnMUJ6a185/dWvfpVUVlYmra2tuWl33HFHUldXl3R0dCRJIqflYNy4ccm3vvWtfc7//ve/nwwdOjSX0yRJkn/9139Njj/++D6IjkMxadKkZPbs2bnHu3btSsaMGZMsWLCgiFFxsObOnZtMnDixx3kbN25Mqqqqkvvvvz837ZVXXkkiImlqauqjCOmtd49/du/enTQ0NCS33XZbbtrGjRuT6urq5J577kmSJElefvnlJCKS3/72t7llHn744aSioiL585//3Gex07OexrRXXnllcvHFF+/zOXLKntRM6aRuSjd1U/qom8qbuild1EzpVMy6qSzuUTJ79uwYMWJETJo0KX784x/HO3+zdzQ1NcXUqVO7LT99+vRoamrq6zA5CE1NTXHKKafE6NGjc9OmT58e7e3t8dJLL+WWkdPSd8stt8Tw4cPj9NNPj9tuu63bZQCampriwx/+cAwYMCA3bfr06fHqq6/G3/72t2KEy37s2LEjVqxY0W2/q6ysjKlTp9rvyshrr70WY8aMiQkTJsQnPvGJWLt2bURErFixIjo7O7vl94QTToijjjpKfstIc3NztLa2dstjfX19TJ48OZfHpqamGDJkSLz//e/PLTN16tSorKyMZcuW9XnMHJwnn3wyRo0aFccff3xce+21sX79+tw8OaU31Ezpom5KD3VTeqib0kHdlF5qpnTri7qpf14jLoCbb745zj///KitrY1HH300PvOZz8SWLVvic5/7XEREtLa2dhs8RkSMHj062tvb4+23346BAwcWI2z2YV/56pq3v2XktHR87nOfizPOOCOGDRsWzzzzTNx4443R0tISt99+e0S8k8Px48d3e86eeR46dGifx8y+/fWvf41du3b1uN/94Q9/KFJU9MbkyZNj0aJFcfzxx0dLS0vMnz8/zjnnnFi1alW0trbGgAED9rr++ejRo3PHXUpfV6562k/3PH+OGjWq2/z+/fvHsGHD5LpEzZgxIz760Y/G+PHjY82aNfGVr3wlZs6cGU1NTdGvXz855aCpmdJH3ZQO6qZ0UTeVP3VTuqmZ0quv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\n",
      "text/plain": [
       "<Figure size 2000x500 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np  # 导入 numpy 库，用于进行数学计算\n",
    "import matplotlib.pyplot as plt  # 导入 matplotlib.pyplot 库，用于绘制图形\n",
    "import math  # 导入 math 库，用于数学计算\n",
    "\n",
    "# 定义一个函数，用于生成正弦波\n",
    "def getSin(amp, freq, phase, sampleList):\n",
    "    return amp * np.sin(-2 * math.pi * freq * sampleList + phase)\n",
    "# 定义一个函数，用于生成余弦波\n",
    "def getCos(amp, freq, phase, sampleList):\n",
    "    return amp * np.cos(-2 * math.pi * freq * sampleList + phase)\n",
    "#定义一个函数，把去噪的掩膜放进去\n",
    "def denoise(arr,thresh):\n",
    "    mask=arr>thresh\n",
    "    return arr*mask\n",
    "# 1. 获得混合波形\n",
    "srate = 3000  # 设置采样率为 3000\n",
    "t = np.linspace(0, 1, srate)\n",
    "#分别生成四个正余弦波\n",
    "s1 = getSin(amp=1.5, freq=30, phase=0, sampleList=t)\n",
    "s2 = getCos(amp=3, freq=5, phase=0, sampleList=t)\n",
    "s3 = getSin(amp=10, freq=100, phase=0, sampleList=t)\n",
    "s4 = getCos(amp=20, freq=120,phase=0,sampleList=t)\n",
    "m = s1 + s2 + s3 + s4  # 将四个正余弦波相加，得到混合波形\n",
    "\n",
    "# 2. 获得傅里叶系数\n",
    "fCoefs = np.fft.fft(m,srate)\n",
    "# 3. 获得振幅列表：每一个绕线的重心到原点的距离\n",
    "amp_list=2*np.abs(fCoefs/srate)#注意：由于频率有负值，所以振幅被平分了，需要乘以2才能还原原始振幅\n",
    "\n",
    "# 把频率轴从0~1000 转变成 0~499 然后 -500~-1\n",
    "freqs = np.fft.fftfreq(len(amp_list), 1/srate)\n",
    "\n",
    "#循环算法\n",
    "fCoefs1=np.zeros(srate,dtype='complex')\n",
    "for f in range(srate):\n",
    "    p=m*np.exp(-1j*2*math.pi*f*t)\n",
    "    fCoefs1[f]=np.sum(p)\n",
    "amp_shift1=np.fft.fftshift(amp_list)\n",
    "freq_shift1=np.fft.fftshift(freqs)\n",
    "\n",
    "# 然后把 频率轴 和 数据 都变成 0hz 在中间，向左是负频率，向右是正频率的形式\n",
    "amp_shifted=np.fft.fftshift(amp_list)\n",
    "freq_shift=np.fft.fftshift(freqs)\n",
    "#去噪\n",
    "amp_shifted1=denoise(amp_shifted,1)#去除低振幅噪音\n",
    "#去除高于110HZ的噪音\n",
    "amp_shifted2 =np.copy(amp_shifted1)#复制一个同样的数据模型\n",
    "amp_shifted2[np.abs(freq_shift) > 110] = 0#在这个模型上设置条件，输出数据就是修改后的数据\n",
    "# 把振幅列表画出来\n",
    "fg,ax=plt.subplots(2,2,figsize=(20,5))#画画布\n",
    "#第一个子图，去噪前的图像\n",
    "ax[0,0].grid()\n",
    "ax[0,0].stem(freq_shift1,amp_shift1)\n",
    "ax[0,0].set_xlim([-150,150])\n",
    "ax[0,0].set_ylim([-0.5, 21])\n",
    "\n",
    "#第二个子图，循环算法去噪后的图像\n",
    "ax[0,1].grid()\n",
    "ax[0,1].stem(freq_shift1,amp_shifted2)\n",
    "ax[0,1].set_xlim([-150,150])\n",
    "ax[0,1].set_ylim([-0.5, 21])\n",
    "#第三个子图，去噪前的图像\n",
    "ax[1,0].grid()\n",
    "ax[1,0].stem(freq_shift,amp_shifted)\n",
    "ax[1,0].set_xlim([-150,150])\n",
    "ax[1,0].set_ylim([-0.5, 21])\n",
    "#第四个子图，两步去噪后的图像\n",
    "ax[1,1].grid()\n",
    "ax[1,1].stem(freq_shift,amp_shifted2)\n",
    "ax[1,1].set_xlim([-150,150])\n",
    "ax[1,1].set_ylim([-0.5, 21])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fb4fdb98-de07-41d9-9e54-4c89ad8ea2f6",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ea7ed27d-26e6-4601-9bed-0d55e611f5aa",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
